/*
 * @Author: 0x9DEFA478
 * @Date: 2025-07-06 17:08:20
 * @LastEditTime: 2025-09-15 21:00:52
 * @LastEditors: 0x9DEFA478
 * @Description: 
 * 
 */
#ifndef hHMakeTargetConfig_HPP_
#define hHMakeTargetConfig_HPP_
#include <vector>
#include <list>
#include <string>
#include "H_Pointer.hpp"
#include "HMakeValue.hpp"
#include "Utility/H_Path.hpp"


namespace HMake{

  class TargetConfig{
    public:
      using Pointer=H::Pointer<TargetConfig>;
      using ConstPointer=Pointer::Const;

    public:
      TargetConfig(const std::string& name)noexcept:name(name){}
      virtual ~TargetConfig(){}

      virtual const Value* FindValue(const std::string& valueName,const H::Path& path=H::Path::Empty)const=0;
      virtual const Value* FindValue(const std::string& valueName,const H::Path& path,const std::string& cwd)const=0;
      virtual std::list<const Value*> FindChildValue(const std::string& valueName,const H::Path& path=H::Path::Empty)const=0;
      virtual std::list<const Value*> FindChildValue(const std::string& valueName,const H::Path& path,const std::string& cwd)const=0;

      virtual std::string ToString()const=0;

      const std::string& Name()const{return name;}

    private:
      const std::string name;
  };

}


#endif //hHMakeTargetConfig_HPP_
